package ioperations;

import book.Book;
import book.BookList;

import java.util.Scanner;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 姚东名
 * Date: 2024-06-22
 * Time: 9:56
 */
public class AddOperation implements IOperation {
    @Override
    public void work(BookList bookList) {
        System.out.print("添加书籍：");

        //1. 判满
        int currentSize = bookList.getUsedSize();
        if (currentSize == bookList.getBooks().length) {
            System.out.println("书架满了 不能放了.....");
            return;
        }


        //2. 构建对象
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入书名：");
        String name = scanner.nextLine();

        System.out.println("请输入作者：");
        String author = scanner.nextLine();

        System.out.println("请输入书的类型：");
        String type = scanner.nextLine();

        System.out.println("请输入价格：");
        int price = scanner.nextInt();


        Book newBook = new Book(name, author, price, type);

        //3. 判断书架有没有这本书
        for (int i = 0; i < currentSize; i++) {
            Book book = bookList.getBook(i);
            if (book.getName().equals(name)) {
                System.out.println("有这本书不能插入！");
                return;
            }
        }

        //4.插入这本书
        bookList.setBook(currentSize, newBook);

        bookList.setUsedSize(currentSize + 1);

        System.out.println("新增图书成功！！！");

    }
}

/*
这个`AddOperation`类实现了`IOperation`接口，并提供了`work`方法用于向`BookList`中添加新的书籍。以下是该方法的逻辑关系分析：

1. **检查书架是否已满**：
   - 首先，获取书架当前的使用大小（`currentSize`）和书架的总容量。
   - 如果书架已满（`currentSize`等于书架总容量），则输出提示信息并结束方法。

2. **构建新书籍对象**：
   - 使用`Scanner`类从用户那里获取新书籍的信息（书名、作者、类型和价格）。
   - 利用这些信息创建一个新的`Book`对象。

3. **检查书籍是否已存在**：
   - 遍历书架上的所有书籍。
   - 如果找到与新书籍同名的书籍，则输出提示信息并结束方法。

4. **添加新书籍到书架**：
   - 将新创建的`Book`对象添加到书架的下一个可用位置（即`currentSize`所指示的位置）。
   - 更新书架的使用大小（`usedSize`），将其增加1。
   - 输出成功添加新书籍的信息。

简而言之，这个类的`work`方法实现了向书架中添加新书籍的功能，同时确保了书架不会超出容量，并且避免了重复添加相同的书籍。
 */